#[test]
fn iterator_demonstration() {
        let v1 = vec![1, 2, 3];

        let mut v1_iter = v1.iter();

        assert_eq!(v1_iter.next(), Some(&1));
        assert_eq!(v1_iter.next(), Some(&2));
        assert_eq!(v1_iter.next(), Some(&3));
        assert_eq!(v1_iter.next(), None);
}

fn main() {
    // rust中的iterator是lazy型的，好像其他语言也是的。用时才生产。
    let v1 = vec![1, 2, 3];
    let v1_iter = v1.iter();

    // 通过for循环消费
    for v in v1_iter {
        println!("Got {}", v);
    }

    // 再次通过for循环消费，不通过，提示被上一次调用borrow了。
    /*
    for v in v1_iter {
        println!("Got {}", v);
    }
    */

    // 转成借用，也不行，迭代器最好不要借用，多次使用。
    /*
    let v2_iter = v1.iter();
    for v in &v2_iter {
        println!("Got {}", v);
    }
    */
}
